define(["jquery","matchMedia",'jquery-ui-modules/widget',"mage/translate"],function($,mediaCheck){'use strict';$.widget('mage.iasMenu',{viewportActive:null,imagesLoaded:false,body:$('body'),clickEvent:false,triggerByHover:false,isTouch:('ontouchstart'in document.documentElement||'ontouchstart'in window||window.DocumentTouch&&document instanceof window.DocumentTouch||navigator.maxTouchPoints>0||window.navigator.msMaxTouchPoints>0),options:{delay:0,mobileHideSubmenuDelay:500,mobileHideAnimation:300,hoverTimeout:20,loadImagesDelay:2000,submenu:'.submenu',parent:'li.parent',parentTrigger:'> a',parentContent:'> .submenu-wrapper',parentContentList:'> .submenu-wrapper > .submenu-content > .submenu',activeClass:'active-menu',activeTriggerClass:'ui-state-focus',activeContentClass:'active-content',activeChildrenContentClass:'active-children-content',navOpenBodyClass:'navigation-open',navTypeOpenBodyClass:'horizontal-navigation-open',hoverMenu:true,onlyFirstLevelDesktop:true,desktop:{viewAll:true,preventClick:false,viewMore:false},tablet:{viewAll:true,screenFrom:1199,viewMore:false},mobile:{viewAll:true,closeSiblings:true,screenFrom:768}},_create:function(){this._loadImages();},_init:function(){this.delay=this.options.delay;mediaCheck({media:'(max-width: '+(this.options.mobile.screenFrom)+'px)',entry:$.proxy(function(){this.viewportActive=3;this._refresh();this._toggleMobileMode();},this)});mediaCheck({media:'(min-width: '+(this.options.mobile.screenFrom+1)+'px) and (max-width: '+(this.options.tablet.screenFrom)+'px)',entry:$.proxy(function(){this.viewportActive=2;this._refresh();this._toggleTabletMode();},this)});mediaCheck({media:'(min-width: '+(this.options.tablet.screenFrom+1)+'px)',entry:$.proxy(function(){this.viewportActive=1;this._refresh();if(this.options.hoverMenu){this._toggleDesktopMode();}else{this._toggleTabletMode();}},this)});this._assignControls()._listen();this._setActiveMenu();},_setActiveMenu:function(){var currentUrl=window.location.href.split('?')[0];if(!this._setActiveMenuForCategory(currentUrl)){this._setActiveMenuForProduct(currentUrl);}},_setActiveMenuForCategory:function(url){var activeCategoryLink=this.element.find('a[href="'+url+'"]').not('.view-more-link, .all-cat-link, .menu-title-link'),classes,classNav;if(!activeCategoryLink.length){return false;}else{activeCategoryLink.parent().addClass('active');classes=activeCategoryLink.parent().attr('class');classNav=classes.match(/(nav\-)[0-9]+(\-[0-9]+)+/gi);if(classNav){this._setActiveParent(classNav[0]);}} return true;},_setActiveParent:function(childClassName){var parentElement,parentClass=childClassName.substr(0,childClassName.lastIndexOf('-'));if(parentClass.lastIndexOf('-')!==-1){parentElement=this.element.find('.'+parentClass).not('.all-cat');if(parentElement){parentElement.addClass('has-active');} this._setActiveParent(parentClass);}},_setActiveMenuForProduct:function(currentUrl){var categoryUrlExtension,lastUrlSection,possibleCategoryUrl,firstCategoryUrl=this.element.find('> li a').attr('href');if(firstCategoryUrl){lastUrlSection=firstCategoryUrl.substr(firstCategoryUrl.lastIndexOf('/'));categoryUrlExtension=lastUrlSection.lastIndexOf('.')!==-1?lastUrlSection.substr(lastUrlSection.lastIndexOf('.')):'';possibleCategoryUrl=currentUrl.substr(0,currentUrl.lastIndexOf('/'))+categoryUrlExtension;this._setActiveMenuForCategory(possibleCategoryUrl);}},_loadImages:function(){if(!this.imagesLoaded){setTimeout($.proxy(function(){$('nav.navigation .cat-icon img[data-lazy]').each(function(){var $img=$(this);$img.attr('src',$img.attr('data-lazy')).removeAttr('data-lazy').removeClass('not-loaded');if($img.siblings('.lazy-image.not-loaded').length){$img.parent().removeClass('loading');}});$('nav.navigation').addClass('images-loaded');this.imagesLoaded=true;},this),this.options.loadImagesDelay);}},_unbindEvents:function(){this._off(this.element,'mouseenter mouseleave click');this._off(this.element.find(this.options.parent),'click mouseenter mouseleave');this._off(this.element.find(this.options.parent+' '+this.options.parentTrigger),'click');this._off(this.element.find(this.options.parent+' '+this.options.parentContent),'swiperight');this._off(this.element.find(this.options.parent+' '+this.options.parentContent+' .menu-title .heading'),'click');this._off(this.element.find(this.options.parent+' '+this.options.parentContent+' .view-more'),'click');},_toggleDesktopMode:function(){this.element.addClass('menu-initialized');this._unbindEvents();var $parentEventTrigger=this.options.parent;if(this.options.onlyFirstLevelDesktop){this.element.addClass('menu-only-first-level');$parentEventTrigger+='.level0'} var $this=this,$parent=null,events={},timeout=null,closeTimeout=null,closeEvent;events['mouseenter '+$parentEventTrigger]=function(event){if(closeTimeout){clearTimeout(closeTimeout);} if(timeout){clearTimeout(timeout);} timeout=setTimeout(function(){if(!$this.clickEvent){event.stopPropagation();$parent=$(event.target);if(!$parent.is($this.options.parent)){$parent=$(event.target).closest($this.options.parent);} $this._closeSiblings($parent);if(!$parent.hasClass($this.options.activeClass)){$this._open($parent);}} $this.triggerByHover=!$this.clickEvent;$this.clickEvent=false;},$this.options.delay+$this.options.hoverTimeout);};events['mouseleave '+$parentEventTrigger]=function(event){closeEvent=event;if(closeTimeout){clearTimeout(closeTimeout);} closeTimeout=setTimeout(function(){if(timeout){clearTimeout(timeout);} event.stopPropagation();if($this.element.has(event.relatedTarget).length){$parent=$(event.target);if(!$parent.is($this.options.parent)){$parent=$(event.target).closest($this.options.parent);}}else{$parent=null;} $this._close($parent);$this.triggerByHover=false;},$this.options.hoverTimeout);};events['mouseleave']=function(event){$this._close();};events['click '+$parentEventTrigger+' .view-more']=function(event){event.preventDefault();event.stopPropagation();$(event.target).closest($this.options.submenu).toggleClass('view-more-active');};if(this.options.desktop.preventClick||this.isTouch){events['click '+$parentEventTrigger+' '+this.options.parentTrigger]=function(event){event.preventDefault();event.stopPropagation();if(!$this.triggerByHover){$this.clickEvent=true;$parent=$(event.target);if(!$parent.is($this.options.parent)){$parent=$(event.target).closest($this.options.parent);} $this._closeSiblings($parent);if($parent.hasClass($this.options.activeClass)){$this._close($parent);}else{$this._open($parent);}} setTimeout(function(){if($this.triggerByHover){event.stopPropagation();$this._close($(event.target).closest($this.options.parent));$this.triggerByHover=false;}},$this.options.hoverTimeout);};} this._on(events);if(this.options.desktop.viewAll){this._setViewAll();} if(this.options.desktop.viewMore){this._setViewMore();}},_toggleTabletMode:function(){this.element.addClass('menu-initialized');this._unbindEvents();var $parentEventTrigger=this.options.parent;if(this.options.onlyFirstLevelDesktop){this.element.addClass('menu-only-first-level');$parentEventTrigger+='.level0'} var $this=this;var events={};events['click '+$parentEventTrigger+' .view-more']=function(event){event.preventDefault();event.stopPropagation();$(event.target).closest($this.options.submenu).toggleClass('view-more-active');};events['click '+$parentEventTrigger+' '+this.options.parentTrigger]=function(event){event.preventDefault();event.stopPropagation();var $parent=$(event.target);if(!$parent.is($this.options.parent)){$parent=$(event.target).closest($this.options.parent);} $this._closeSiblings($parent);if($parent.hasClass($this.options.activeClass)){$this._close($parent);}else{$this._open($parent);}};this._on(events);if(this.options.tablet.viewAll){this._setViewAll();} if(this.options.tablet.viewMore){this._setViewMore();}},_toggleMobileMode:function(){this.element.addClass('menu-initialized');this._unbindEvents();var $parentEventTrigger=this.options.parent;var $this=this;var events={};events['click '+$parentEventTrigger+' '+this.options.parentTrigger]=function(event){event.preventDefault();event.stopPropagation();var $parent=$(event.target);if(!$parent.is($this.options.parent)){$parent=$(event.target).closest($this.options.parent);} if($this.options.mobile.closeSiblings){$this._closeSiblings($parent);} if($parent.hasClass($this.options.activeClass)){$this._close($parent);}else{$this._open($parent);}};events['click '+this.options.parent+' '+this.options.parentContent+' .menu-title .heading']=function(event){event.preventDefault();var $parent=$(event.target).closest($this.options.parent);$this._closeSiblings($parent);$this._close($parent);};events['swiperight '+this.options.parent+' '+this.options.parentContent]=function(event){event.preventDefault();var $parent=$(event.target).closest($this.options.parent);$this._closeSiblings($parent);$this._close($parent);};this._on(events);if(this.options.mobile.viewAll){this._setViewAll();}},_refresh:function(){this.element.removeClass('menu-initialized menu-only-first-level');this._close();var categoryParent=this.element.find('.all-cat'),html=$('html');categoryParent.remove();if(html.hasClass('nav-open')){html.removeClass('nav-open');this.body.removeClass(this.options.navOpenBodyClass);setTimeout(function(){html.removeClass('nav-before-open');},this.options.mobileHideSubmenuDelay);}},_setViewAll:function(){this.element.find('.all-cat').remove();var subMenus=this.element.find(this.options.parent);$.each(subMenus,$.proxy(function(index,item){var menues=$(item).find(this.options.parentContentList);menues.each($.proxy(function(i,elem){var menu=$(elem);if(menu.find('.all-cat').length===0){var category=$(item).find(this.options.parentTrigger+' span').not('.ui-menu-icon').text(),categoryUrl=$(item).find(this.options.parentTrigger).attr('href');var categoryLink=$('').attr('href',categoryUrl);if(menu.attr('data-view-all-text')){categoryLink.text(menu.attr('data-view-all-text'));}else{categoryLink.text($.mage.__('View All Category'));} var categoryParent=$('
  • ').addClass(menu.children().last().attr('class')).addClass('ui-menu-item all-cat').removeClass('parent category-item').html(categoryLink);menu.append(categoryParent);}},this));},this));},_setViewMore:function(){this.element.find('.view-more').remove();this.element.find('.view-more-active').removeClass('view-more-active');var subMenus=this.element.find(this.options.parent);$.each(subMenus,$.proxy(function(index,item){var menues=$(item).find(this.options.parentContentList+' '+this.options.submenu);menues.each($.proxy(function(i,elem){var menu=$(elem);if(menu.find('.view-more').length===0){var categoryLink=$('').attr('href','#').text($.mage.__('View More'));var categoryParent=$('
  • ').addClass(menu.children().last().attr('class')).addClass('ui-menu-item view-more').removeClass('parent').html(categoryLink);menu.append(categoryParent);}},this));},this));},_closeSiblings:function(menu){var $this=this;var parentsActive=menu.parents($this.options.parent);parentsActive.push(menu);parentsActive.each(function(){$(this).siblings($this.options.parent).each(function(){$this._close($(this));});});},_close:function(closeMenu){var menu=closeMenu;if(!menu){menu=this.element;} if((this.viewportActive!==3&&this.options.onlyFirstLevelDesktop)){menu.removeClass(this.options.activeClass);if(!closeMenu){menu.find('li.level0 '+this.options.parentContent).hide();menu.find('li.level0 '+this.options.parent+' '+this.options.parentContent).show();}else{menu.find(this.options.parentContent).hide();menu.find(this.options.parent+' '+this.options.parentContent).show();}}else{if(this.viewportActive===3){var $this=this;setTimeout(function(){menu.removeClass($this.options.activeClass);menu.find($this.options.parentContent+', '+$this.options.parent+' '+$this.options.parentContent).hide();},$this.options.mobileHideSubmenuDelay);}else{menu.removeClass(this.options.activeClass);menu.find(this.options.parentContent+', '+this.options.parent+' '+this.options.parentContent).hide();}} menu.find('.'+this.options.activeClass).removeClass(this.options.activeClass);menu.find('.'+this.options.activeTriggerClass).removeClass(this.options.activeTriggerClass);menu.find('.'+this.options.activeContentClass).removeClass(this.options.activeContentClass);menu.find('.'+this.options.activeChildrenContentClass).removeClass(this.options.activeChildrenContentClass);menu.removeClass(this.options.activeChildrenContentClass);if(!menu.hasClass('level0')){let parentActive=menu.parent().closest('.'+this.options.activeChildrenContentClass);if(parentActive&&!parentActive.find('.'+this.options.activeContentClass).length){parentActive.removeClass(this.options.activeChildrenContentClass)}} if(this.element.find('.'+this.options.activeClass).length===0){this.body.removeClass(this.options.navOpenBodyClass);}},_open:function(openMenu){this.body.addClass(this.options.navOpenBodyClass);openMenu.addClass(this.options.activeClass);openMenu.find(this.options.parentTrigger).addClass(this.options.activeTriggerClass);openMenu.find(this.options.parentContent).addClass(this.options.activeContentClass).show();if(!openMenu.hasClass('level0')){openMenu.parent().closest(this.option.parent).addClass(this.options.activeChildrenContentClass)}},_assignControls:function(){this.controls={toggleBtn:$('[data-action="toggle-nav"]'),swipeArea:$('.nav-sections')};return this;},_listen:function(){var controls=this.controls;var toggle=this.toggle;this._on(controls.toggleBtn,{'click':toggle});this._on(controls.swipeArea,{'swipeleft':toggle});},toggle:function(){var $this=this;$this._close();if($('html').hasClass('nav-open')){$('html').removeClass('nav-open');$this.body.removeClass(this.options.navTypeOpenBodyClass);setTimeout(function(){$('html').removeClass('nav-before-open');},$this.options.mobileHideAnimation);}else{$('html').addClass('nav-before-open');setTimeout(function(){$('html').addClass('nav-open');$this.body.addClass($this.options.navTypeOpenBodyClass);},42);}}});return $.mage.iasMenu;});